package cn.alex.sso.framework.core;

import cn.dev33.satoken.context.SaHolder;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.PageUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

/**
 * 分页工具类
 *
 * @author Alex
 * @date 2024/11/28 22:47
 */
public class PageHelper {
    private static final String PAGE_NUM = "pageNum";
    private static final String PAGE_SIZE = "pageSize";

    private static final Integer DEFAULT_PAGE_NUM = 1;
    private static final Integer DEFAULT_PAGE_SIZE = 10;

    /**
     * 获取MybatisPlus分页对象
     *
     * @return Page
     */
    public static Page getPage() {
        return new Page<>(PageHelper.getPageNum(), PageHelper.getPageSize());
    }

    /**
     * 获取前端传递的分页参数
     *
     * @return 当前页
     */
    public static Integer getPageNum() {
        String pageNum = SaHolder.getRequest().getParam(PAGE_NUM);
        // 当前页参数从1开始, 如果小于1默认设置为1
        if (StrUtil.isBlank(pageNum) || Convert.toInt(pageNum) < 1) {
            return DEFAULT_PAGE_NUM;
        }

        return Convert.toInt(pageNum);
    }

    /**
     * 获取前端传递的分页参数
     *
     * @return 每页显示条数
     */
    public static Integer getPageSize() {
        String pageSize = SaHolder.getRequest().getParam(PAGE_SIZE);
        return StrUtil.isBlank(pageSize) ? DEFAULT_PAGE_SIZE : Convert.toInt(pageSize);
    }

    /**
     * 获取分页起始位置
     *
     * @return 分页起始位置
     */
    public static Integer getPageStart() {
        PageUtil.setOneAsFirstPageNo();
        return PageUtil.getStart(PageHelper.getPageNum(), PageHelper.getPageSize());
    }

    /**
     * 获取分页结束位置
     *
     * @return 分页结束位置
     */
    public static Integer getPageEnd() {
        PageUtil.setOneAsFirstPageNo();
        return PageUtil.getEnd(PageHelper.getPageNum(), PageHelper.getPageSize());
    }
}
